/*
 * @Author: ljk
 * @Date: 2023-05-13 09:56:39
 * @LastEditors: ljk
 * @LastEditTime: 2023-05-14 12:00:07
 * @Description: 共享内存服务端
 */
#include "comm.hpp"

int main()
{
    Init init(SERVER);
    char *start = init.getStart();

    // 通信
    int n = 0;
    // 在通信的时候，没用任何接口? 一旦共享内存映射到进程的地址空间, 该共享内存直接被所有的进程全部看到
    // 因为共享内存这种特性,可以让进程通信的时候,减少拷贝次数,所以共享内存是所有的进程间通信最快的
    // 共享内存没有任何的保护机制(管道具有保护机制: 同步互斥) -- 为什么？管道是通过系统接口通信的, 共享内存直接通信
    while (n <= 50)
    {
        cout << "client -> server# " << start << endl;
        sleep(1);
        n++;
    }

    // 扩展：
    // 1. client写完,才通知server读取，刚开始，一定先让client运行
    // 2. 命名管道
    // 3. client写完了,才通知server读取，读取完了,才让client进行吸入,两个管道
    // 4.多进程共享管道通信

    // 1. 创建key
    // key_t k = getKey();
    // cout << "server: " << toHex(k) << endl;

    // // 2. 创建共享内存
    // int shmid = createShm(k, gsize);

    // cout << "server shmid: " << shmid << endl;

    // sleep(3);

    // // 3. 将自己和共享内存关联起来
    // char* start = attachShm(shmid);

    // sleep(20);

    // // 通信代码

    // // 4. 将自己和共享内存去关联
    // detachShm(start);

    // sleep(3);

    // // 5. 删除共享内存
    // delShm(shmid);

    // 共享内存结构 -- 了解
    // struct shmid_ds ds;
    // int n = shmctl(shmid, IPC_STAT, &ds);
    // if (n != -1)
    // {
    //     cout << "..." << endl;
    // }

    return 0;
}